home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #4 / Amiga Plus CD - 2000 - No. 4.iso / Tools / Dev / SpeakFreely_Src / gsm / src / toast_audio.c < prev    next >
C/C++ Source or Header  |  2000-05-27  |  2KB  |  99 lines

  1. /*
  2.  * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
  3.  * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
  4.  * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
  5.  */
  6.  
  7. /* $Header: /home/kbs/jutta/src/gsm/gsm-1.0/src/RCS/toast_audio.c,v 1.1 1992/10/28 00:15:50 jutta Exp $ */
  8.  
  9. #include    "toast.h"
  10.  
  11. /*  toast_audio -- functions to manipulate SunOS audio files.
  12.  *
  13.  *  This is reverse engineered from our present soundfiles
  14.  *  and in no way portable, durable or aesthetically pleasing.
  15.  */
  16.  
  17. extern FILE    * in,       * out;
  18. extern char    * inname;
  19. extern char    * progname;
  20.  
  21. extern int    (*output) P((gsm_signal *)),
  22.         (*input ) P((gsm_signal *));
  23.  
  24. extern int    alaw_input   P((gsm_signal *)),
  25.         ulaw_input   P((gsm_signal *)),
  26.         linear_input P((gsm_signal *));
  27.  
  28. extern int    ulaw_output P((gsm_signal *));
  29.  
  30. static int put_u32 P2((f, u), FILE * f, unsigned long u)
  31. {
  32.     /*  Write a 32-bit unsigned value msb first. 
  33.      */
  34.     if (  putc( (char)((u>>24) & 0x0FF), f) == EOF
  35.        || putc( (char)((u>>16) & 0x0FF), f) == EOF
  36.        || putc( (char)((u>> 8) & 0x0FF), f) == EOF
  37.        || putc( (char)( u      & 0x0FF), f) == EOF) return -1;
  38.  
  39.     return 0;
  40. }
  41.  
  42. static int get_u32 P2((f, up), FILE * f, unsigned long * up)
  43. {
  44.     /*  Read a 32-bit unsigned value msb first.
  45.      */
  46.     int        i;
  47.     unsigned long     u;
  48.  
  49.     if (  (i = getc(f)) == EOF
  50.        || ((u = (unsigned char)i), (i = getc(f)) == EOF)
  51.        || ((u = (u<<8)|(unsigned char)i), (i = getc(f)) == EOF)
  52.        || ((u = (u<<8)|(unsigned char)i), (i = getc(f)) == EOF)) return -1;
  53.  
  54.     *up = u | (unsigned char)i;
  55.     return 0;
  56. }
  57.  
  58. int audio_init_input P0()
  59. {
  60.     unsigned long    len, enc;    /* unsigned 32 bits    */
  61.  
  62.     if (  fgetc(in) != '.' 
  63.        || fgetc(in) != 's'
  64.        || fgetc(in) != 'n'
  65.        || fgetc(in) != 'd'
  66.        || get_u32( in, &len )
  67.        || get_u32( in, &enc )    /* skip this */
  68.        || get_u32( in, &enc )
  69.        || fseek(in, len-4*4, 1) < 0) return 0;
  70.  
  71.     switch (enc) {
  72.     case 1:    input = ulaw_input;      break;
  73.     case 2: input = alaw_input;      break;
  74.     case 3: input = linear_input;     break;
  75.     default:
  76.         fprintf(stderr,
  77.         "%s: warning: file format #%lu for %s not implemented.\n",
  78.             progname, enc, inname);
  79.         input = ulaw_input;
  80.         break;
  81.     }
  82.     return 0;
  83. }
  84.  
  85. int audio_init_output P0()
  86. {
  87.     if (  fputs(".snd", out) == EOF
  88.        || put_u32(out, 32)
  89.        || put_u32(out, ~0)
  90.        || put_u32(out, 1)
  91.        || put_u32(out, 8000)
  92.        || put_u32(out, 1)
  93.        || put_u32(out, 0)
  94.        || put_u32(out, 0)) return -1;
  95.  
  96.     return 0;
  97. }
  98.  
  99.